package br.com.viewcar.entity.dto;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import br.com.viewcar.util.ColorUtil;
import br.com.viewcar.util.DateUtil;
import br.com.viewcar.util.IndexTableDecorator;

public class PontoDTO  implements Serializable {

	private static final long serialVersionUID = 4561331928131040072L;

	private int index;

	private int id;
	private int codigoExterno;
	private int tipo;
	private String nome;
	private String placa;
	private String marca;
	private String modelo;
	private Integer ano;
	private String cor;
	private int ordem;
	private float velocidadeMaxima;
	private float lat;
	private float lng;
	private float velocidade;
	private float temperatura;
	private float odometro;
	private float horimetro;
	private boolean ignicao;
	private boolean panico;
	private boolean bloqueio;
	private boolean sirene;
	private boolean escuta;
	private boolean selecionado;
	private Date dataTransmissao;
	private String pontoMaisProximo;
	private float distPontoMaisProximo;
	private Boolean existeTemperatura;
	private Boolean existeTerminalTexto;
	private Boolean existeOdometro;
	private String procedimentos;
	private String nomeResponsavel;
	private String celularResponsavel;
	private float kmAtual;
	private float nivelCombustivel;
	private float capacidadeTanque;
	private float percentualCombustivel;
	private boolean statusOdometro;
	private boolean statusOleo;
	private boolean statusFiltroAr;
	private boolean hasNivelCombustivel;
	private Long numeroOcorrenciasAbertas;
	private Long numeroPanicoAberto;
	private Long numeroBloqueioAberto;
	private List<PontoDTO> rastro;
	private List<PontoDTO> rotaVeiculo;

	public boolean isStatusOdometro() {
		return statusOdometro;
	}

	public void setStatusOdometro(boolean statusOdometro) {
		this.statusOdometro = statusOdometro;
	}

	public float getKmAtual() {
		return kmAtual;
	}

	public void setKmAtual(float kmAtual) {
		this.kmAtual = kmAtual;
	}

	public int getIndex() {
		return index;
	}

	public void setIndex(int index) {
		this.index = index;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public String getMarca() {
		return marca;
	}

	public void setMarca(String marca) {
		this.marca = marca;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public Integer getAno() {
		return ano;
	}

	public void setAno(Integer ano) {
		this.ano = ano;
	}

	public String getCor() {
		return cor;
	}

	public int getOrdem() {
		return ordem;
	}

	public void setOrdem(int ordem) {
		this.ordem = ordem;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	public float getVelocidadeMaxima() {
		return velocidadeMaxima;
	}

	public void setVelocidadeMaxima(float velocidadeMaxima) {
		this.velocidadeMaxima = velocidadeMaxima;
	}

	public float getLat() {
		return lat;
	}

	public void setLat(float lat) {
		this.lat = lat;
	}

	public float getLng() {
		return lng;
	}

	public void setLng(float lng) {
		this.lng = lng;
	}

	public float getVelocidade() {
		return velocidade;
	}

	public void setVelocidade(float velocidade) {
		this.velocidade = velocidade;
	}

	public float getTemperatura() {
		return temperatura;
	}

	public void setTemperatura(float temperatura) {
		this.temperatura = temperatura;
	}

	public float getOdometro() {
		return odometro;
	}

	public void setOdometro(float odometro) {
		this.odometro = odometro;
	}

	public float getHorimetro() {
		return horimetro;
	}

	public void setHorimetro(float horimetro) {
		this.horimetro = horimetro;
	}

	public boolean getIgnicao() {
		return ignicao;
	}

	public void setIgnicao(boolean ignicao) {
		this.ignicao = ignicao;
	}

	public boolean getPanico() {
		return panico;
	}

	public void setPanico(boolean panico) {
		this.panico = panico;
	}

	public boolean getBloqueio() {
		return bloqueio;
	}

	public void setBloqueio(boolean bloqueio) {
		this.bloqueio = bloqueio;
	}

	public boolean getSirene() {
		return sirene;
	}

	public void setSirene(boolean sirene) {
		this.sirene = sirene;
	}

	public boolean getEscuta() {
		return escuta;
	}

	public void setEscuta(boolean escuta) {
		this.escuta = escuta;
	}

	public boolean getSelecionado() {
		return selecionado;
	}

	public void setSelecionado(boolean selecionado) {
		this.selecionado = selecionado;
	}

	public Date getDataTransmissao() {
		return dataTransmissao;
	}

	public void setDataTransmissao(Date dataTransmissao) {
		this.dataTransmissao = dataTransmissao;
	}

	public String getPontoMaisProximo() {
		return pontoMaisProximo;
	}

	public void setPontoMaisProximo(String pontoMaisProximo) {
		this.pontoMaisProximo = pontoMaisProximo;
	}

	public float getDistPontoMaisProximo() {
		return distPontoMaisProximo;
	}

	public void setDistPontoMaisProximo(float distPontoMaisProximo) {
		this.distPontoMaisProximo = distPontoMaisProximo;
	}

	public List<PontoDTO> getRastro() {
		return rastro;
	}

	public void setRastro(List<PontoDTO> rastro) {
		this.rastro = rastro;
	}

	public List<PontoDTO> getRotaVeiculo() {
		return rotaVeiculo;
	}

	public void setRotaVeiculo(List<PontoDTO> rotaVeiculo) {
		this.rotaVeiculo = rotaVeiculo;
	}

	public String getNomeResponsavel() {
		return nomeResponsavel;
	}

	public void setNomeResponsavel(String nomeResponsavel) {
		this.nomeResponsavel = nomeResponsavel;
	}

	public String getCelularResponsavel() {
		return celularResponsavel;
	}

	public void setCelularResponsavel(String celularResponsavel) {
		this.celularResponsavel = celularResponsavel;
	}

	public String getProcedimentos() {
		return procedimentos;
	}

	public void setProcedimentos(String procedimentos) {
		this.procedimentos = procedimentos;
	}

	public String getDataTransmissaoFormatada() {
		return DateUtil.parseAsString("HH:mm:ss dd/MM/yyyy", dataTransmissao);
	}

	public String getDataTransmissaoDMY() {
		return DateUtil.parseAsString("dd/MM/yyyy", dataTransmissao);
	}

	public String getColor() {
		return ColorUtil.getColor(index);
	}

	public String getRowColor() {
		return IndexTableDecorator.selectRowClass(dataTransmissao);
	}

	public boolean isExcessoVelocidade() {
		return velocidade > velocidadeMaxima;
	}

	public boolean isNaoExcessoVelocidade() {
		return !isExcessoVelocidade();
	}

	public String getDataString() {
		return id + "|" + nome + "|" + tipo + "|" + lat + "|" + lng + "|" + pontoMaisProximo + "|" + distPontoMaisProximo + "|" + velocidade + "|" + DateUtil.parseAsString("dd/MM/yyyy HH:mm:ss", dataTransmissao) + "|" + placa +" |||";
	}

	public String getRastroString() {

		String result = "";

		for (PontoDTO ponto : rastro) {

			result += ponto.getLat() + " " + ponto.getLng() + "|";
		}

		return result.length() > 0 ? result.substring(0, result.length() - 1) : "";
	}

	public String getRotaVeiculoString() {

		String result = "";

		if(rotaVeiculo != null ){

		for (PontoDTO ponto : rotaVeiculo) {

			result += ponto.getLat() + "|" + ponto.getLng() + "|" + ponto.getPontoMaisProximo()+ "|" + ponto.getNome() + "|" + ponto.getOrdem() + "|" + ponto.getDataTransmissaoDMY() + "|";
		}

		return result.length() > 0 ? result.substring(0, result.length() - 1) : "";

		} else {

			return null;
		}
	}

	public int getCodigoExterno() {
		return codigoExterno;
	}

	public void setCodigoExterno(int codigoExterno) {
		this.codigoExterno = codigoExterno;
	}

	public Long getNumeroBloqueioAberto() {
		return numeroBloqueioAberto;
	}

	public void setNumeroBloqueioAberto(Long numeroBloqueioAberto) {
		if (numeroBloqueioAberto == null) {

			numeroBloqueioAberto = 0L;
		}

		this.numeroBloqueioAberto = numeroBloqueioAberto;
	}

	public Long getNumeroPanicoAberto() {
		return numeroPanicoAberto;
	}

	public void setNumeroPanicoAberto(Long numeroPanicoAberto) {
		if (numeroPanicoAberto == null) {

			numeroPanicoAberto = 0L;
		}

		this.numeroPanicoAberto = numeroPanicoAberto;
	}

	public Long getNumeroOcorrenciasAbertas() {
		return numeroOcorrenciasAbertas;
	}

	public void setNumeroOcorrenciasAbertas(Long numeroOcorrenciasAbertas) {

		if (numeroOcorrenciasAbertas == null) {

			numeroOcorrenciasAbertas = 0L;
		}

		this.numeroOcorrenciasAbertas = numeroOcorrenciasAbertas;
	}

	public Boolean getExisteTemperatura() {
		return existeTemperatura;
	}

	public void setExisteTemperatura(Boolean existeTemperatura) {

		if (existeTemperatura == null) {

			this.existeTemperatura = false;

		} else {

			this.existeTemperatura = existeTemperatura;
		}
	}

	public Boolean getExisteTerminalTexto() {
		return existeTerminalTexto;
	}

	public void setExisteTerminalTexto(Boolean existeTerminalTexto) {

		if (existeTerminalTexto == null) {

			this.existeTerminalTexto = false;

		} else {

			this.existeTerminalTexto = existeTerminalTexto;
		}
	}

	public Boolean getExisteOdometro() {
		return existeOdometro;
	}

	public void setExisteOdometro(Boolean existeOdometro) {

		if (existeOdometro == null) {

			this.existeOdometro = false;

		} else {

			this.existeOdometro = existeOdometro;
		}
	}


	public Boolean getExisteOcorrenciasAbertas() {

		return numeroOcorrenciasAbertas != null && numeroOcorrenciasAbertas > 0 ? true : false;
	}

	public Boolean getExistePanicoAberto() {

		return numeroPanicoAberto != null && numeroPanicoAberto > 0 ? true : false;
	}

	public Boolean getExisteBloqueioAberto() {

		return numeroBloqueioAberto != null && numeroBloqueioAberto > 0 ? true : false;
	}

	public Boolean getHasRoute(){

		return rotaVeiculo.size() > 0;
	}

	public float getNivelCombustivel() {
		return nivelCombustivel;
	}

	public void setNivelCombustivel(float nivelCombustivel) {
		this.nivelCombustivel = nivelCombustivel;
	}

	public boolean isStatusOleo() {
		return statusOleo;
	}

	public void setStatusOleo(boolean statusOleo) {
		this.statusOleo = statusOleo;
	}

	public boolean isStatusFiltroAr() {
		return statusFiltroAr;
	}

	public void setStatusFiltroAr(boolean statusFiltroAr) {
		this.statusFiltroAr = statusFiltroAr;
	}

	public float getCapacidadeTanque() {
		return capacidadeTanque;
	}

	public void setCapacidadeTanque(float capacidadeTanque) {
		this.capacidadeTanque = capacidadeTanque;
	}

	public float getPercentualCombustivel() {
		return percentualCombustivel;
	}

	public void setPercentualCombustivel(float percentualCombustivel) {
		this.percentualCombustivel = percentualCombustivel;
	}

	public boolean isHasNivelCombustivel() {
		return hasNivelCombustivel;
	}

	public void setHasNivelCombustivel(boolean hasNivelCombustivel) {
		this.hasNivelCombustivel = hasNivelCombustivel;
	}
}